﻿using Common;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Threading;
using System.Threading.Tasks;
using T68Control.Procdure;
using static T68Control.S12L_M1.zlgcan;

//using static T68Control.S12L_M1.zlgcan;

namespace T68Control.S12L_M1
{
    internal class recvdatathread
    {
        [UnmanagedFunctionPointer(CallingConvention.StdCall)]
        public delegate void RecvFDDataEventHandler(ZCAN_ReceiveFD_Data[] data, uint len, uint ch);//CANFD数据接收事件委托

        private const int TYPE_CAN = 0;
        private const int TYPE_CANFD = 1;

        private bool m_bStart;
        private IntPtr channel_handle_;
        private IntPtr channel_handle2_;
        private Thread recv_thread_;
        private static object locker = new object();

        public static RecvFDDataEventHandler OnRecvFDDataEvent;

        public recvdatathread()
        {
        }

        public event RecvFDDataEventHandler RecvFDData
        {
            add { OnRecvFDDataEvent += new RecvFDDataEventHandler(value); }
            remove { OnRecvFDDataEvent -= new RecvFDDataEventHandler(value); }
        }

        public void setStart(bool start)
        {
            m_bStart = start;
            if (start)
            {
                recv_thread_ = new Thread(RecvDataFunc);
                recv_thread_.IsBackground = true;
                recv_thread_.Start();
            }
            else
            {
                recv_thread_.Join();
                recv_thread_ = null;
            }
        }

        public void setChannelHandle(IntPtr channel_handle, IntPtr channel_handle2)
        {
            lock (locker)
            {
                channel_handle_ = channel_handle;
                channel_handle2_ = channel_handle2;
            }
        }

        //数据接收函数
        protected void RecvDataFunc()
        {
            ZCAN_Receive_Data[] can_data = new ZCAN_Receive_Data[100];
            ZCAN_ReceiveFD_Data[] canfd_data = new ZCAN_ReceiveFD_Data[100];
            uint len;
            while (m_bStart)
            {
                lock (locker)
                {
                    len = Method.ZCAN_GetReceiveNum(channel_handle_, TYPE_CANFD);
                    if (len > 0)
                    {
                        try
                        {
                            int size = Marshal.SizeOf(typeof(ZCAN_ReceiveFD_Data));
                            IntPtr ptr = Marshal.AllocHGlobal((int)len * size);
                            len = Method.ZCAN_ReceiveFD(channel_handle_, ptr, len, 50);
                            for (int i = 0; i < len; ++i)
                            {
                                canfd_data[i] = (ZCAN_ReceiveFD_Data)Marshal.PtrToStructure(
                                    (IntPtr)(ptr + i * size), typeof(ZCAN_ReceiveFD_Data));
                            }
                            OnRecvFDDataEvent(canfd_data, len, 0);
                            Marshal.FreeHGlobal(ptr);
                        }
                        catch (Exception ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }

                    len = Method.ZCAN_GetReceiveNum(channel_handle2_, TYPE_CANFD);
                    if (len > 0)
                    {
                        int size = Marshal.SizeOf(typeof(ZCAN_ReceiveFD_Data));
                        IntPtr ptr = Marshal.AllocHGlobal((int)len * size);
                        len = Method.ZCAN_ReceiveFD(channel_handle2_, ptr, len, 50);
                        for (int i = 0; i < len; ++i)
                        {
                            canfd_data[i] = (ZCAN_ReceiveFD_Data)Marshal.PtrToStructure(
                                (IntPtr)(ptr + i * size), typeof(ZCAN_ReceiveFD_Data));
                        }
                        OnRecvFDDataEvent(canfd_data, len, 1);
                        Marshal.FreeHGlobal(ptr);
                    }
                }

                Thread.Sleep(10);
            }
        }
    }

    public class ReceiveData
    {
        public UInt64 timeStamp;
        public string data;
    }

    internal class CanFDHelper : NotifyBase
    {
        private const Int64 NULL = 0;
        private const int CANFD_BRS = 0x01; /* bit rate switch (second bitrate for payload data) */
        private const int CANFD_ESI = 0x02; /* error state indicator of the transmitting node */

        /* CAN payload length and DLC definitions according to ISO 11898-1 */
        private const int CAN_MAX_DLC = 8;
        private const int CAN_MAX_DLEN = 8;

        /* CAN FD payload length and DLC definitions according to ISO 11898-7 */
        private const int CANFD_MAX_DLC = 15;
        private const int CANFD_MAX_DLEN = 64;

        private const uint CAN_EFF_FLAG = 0x80000000U; /* EFF/SFF is set in the MSB */
        private const uint CAN_RTR_FLAG = 0x40000000U; /* remote transmission request */
        private const uint CAN_ERR_FLAG = 0x20000000U; /* error message frame */
        private const uint CAN_ID_FLAG = 0x1FFFFFFFU; /* id */

        private DeviceInfo[] kDeviceType =
        {
             new DeviceInfo(Define.ZCAN_USBCANFD_200U, 2),
             new DeviceInfo(Define.ZCAN_USBCANFD_100U, 1),
             new DeviceInfo(Define.ZCAN_USBCANFD_MINI, 1)
         };

        private uint[] kAbitTiming =
        {
            1000000,//1Mbps
            800000,//800kbps
            500000,//500kbps
            250000,//250kbps
            125000,//125kbps
            100000,//100kbps
            50000 //50kbps
        };

        private uint[] kDbitTiming =
        {
            5000000,//5Mbps
            4000000,//4Mbps
            2000000,//2Mbps
            1000000 //1Mbps
        };

        //初始化参数
        //设备类型
        private int comboBox_device = 0;

        //设备索引
        private int comboBox_index = 0;

        //CanFD标准  0：CanFD_ISO 、1：CanFD_BOSCH
        private int comboBox_standard = 0;

        //工作模式 0：正常、1：只听
        private int comboBox_mode = 0;

        //仲裁域波特率 0：1Mbps、1：800kbps、2：500kbps、3：250kbps、4：125kbps、5：100kbps、6：50kbps
        private int comboBox_ABIT = 2;

        //数据域波特率 0：5Mbps、1：4Mbps、2：2Mbps、3：1Mbps
        private int comboBox_ABIT2 = 2;

        //滤波模式 0：标准帧 、1：扩展帧、3：禁能
        private int comboBox_standard2 = 2;

        //帧类型 0：标准帧、1：扩展帧
        private int comboBox_frametype = 0;

        //协议 0：can、1：canfd
        private int comboBox_protocol = 1;

        //canfd加速 0：否、1：是
        private int comboBox_canfd_exp = 0;

        private int comboBox_sendtype = 0;
        //private int comboBox_channel = 0;

        private int channel_index_ = 0;
        private IntPtr device_handle_;
        private IntPtr channel_handle_;
        private IntPtr channel_handle2_; //CAN2

        private IProperty property_;

        private recvdatathread recv_data_thread_;

        private string receiveData = "";

        public Dictionary<string, Queue<ReceiveData>> ReceiveData_queue { get; set; } = new Dictionary<string, Queue<ReceiveData>>();

        private bool m_bOpen = false;
        private bool m_init = false;
        private bool m_bStart = false;
        private bool m_bReset = false;
        private bool m_bCloud = false;
        private bool m_threadClosed = true;

        private bool isWhile = false;

        private string textBox_startid = "00000000";

        public string TextBox_startid
        {
            get { return textBox_startid; }
            set
            {
                textBox_startid = value;
                this.DoNotify();
            }
        }

        private string textBox_endid = "FFFFFFFF";

        public string TextBox_endid
        {
            get { return textBox_endid; }
            set
            {
                textBox_endid = value;
                this.DoNotify();
            }
        }

        /// <summary>
        /// 低亮
        /// </summary>
        private Dictionary<string, string> Lowkeys = new Dictionary<string, string>() {
            {"226", "00 00 00 00 00 00 00 00" },
            {"201", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"26f", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"270", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"202", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"203", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"204", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"205", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"206", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"207", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"208", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"209", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"20a", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"20b", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"20c", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"20d", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"20e", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"20f", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"210", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"211", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"212", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"213", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"214", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"215", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"216", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"217", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"218", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"228", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"219", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"21a", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"21b", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"21c", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"21d", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"21e", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"21f", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"220", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"221", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"222", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"223", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"224", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e"},
            {"229", "1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 1e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" },
        };

        /// <summary>
        /// 高亮
        /// </summary>
        private Dictionary<string, string> Midkeys = new Dictionary<string, string>() {
            {"226", "00 00 00 00 00 00 00 00" },
            {"201", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"26f", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"270", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"202", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"203", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"204", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"205", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"206", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"207", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"208", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"209", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"20a", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"20b", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"20c", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"20d", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"20e", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"20f", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"210", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"211", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"212", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"213", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"214", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"215", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"216", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"217", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"218", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"228", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"219", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"21a", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"21b", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"21c", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"21d", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"21e", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"21f", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"220", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"221", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"222", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"223", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"224", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64 64"},
            {"229", "64 64 64 64 64 64 64 64 64 64 64 64 64 64 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" },
        };

        /// <summary>
        /// 中亮
        /// </summary>
        private Dictionary<string, string> Highkeys = new Dictionary<string, string>() {
            {"226", "00 00 00 00 00 00 00 00" },
            {"201", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"26f", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"270", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
            {"202", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"203", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"204", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"205", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"206", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"207", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"208", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"209", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"20a", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"20b", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"20c", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"20d", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"20e", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"20f", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"210", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"211", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"212", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"213", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"214", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"215", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"216", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"217", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"218", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"228", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"219", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"21a", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"21b", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"21c", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"21d", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"21e", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"21f", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"220", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"221", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"222", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"223", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"224", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff"},
            {"229", "ff ff ff ff ff ff ff ff ff ff ff ff ff ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" },
        };

        /// <summary>
        /// 棋格1
        /// </summary>
        private Dictionary<string, string> Checker1 = new Dictionary<string, string>() {
             {"226", "00 00 00 00 00 00 00 00"},
             {"201", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
             {"26f", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
             {"270", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
             {"202", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"203", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"204", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"205", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"206", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"207", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"208", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"209", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"20a", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"20b", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"20c", "ff 00 ff 00 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"20d", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"20e", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00"},
             {"20f", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"210", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"211", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff 00 ff 00 ff 00 ff"},
             {"212", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"213", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"214", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"215", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"216", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"217", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"218", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"228", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"219", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"21a", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"21b", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"21c", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"21d", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"21e", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"21f", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"220", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"221", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"222", "ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"223", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"224", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"229", "00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00" }
        };

        /// <summary>
        /// 棋格2
        /// </summary>
        private Dictionary<string, string> Checker2 = new Dictionary<string, string>() {
             {"226", "00 00 00 00 00 00 00 00"},
             {"201", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
             {"26f", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
             {"270", "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
             {"202" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"203" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"204" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"205" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"206" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"207" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"208" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"209" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"20a" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"20b" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"20c" ,"00 ff 00 ff ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"20d" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"20e" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff"},
             {"20f" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"210" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"211" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00 ff 00 ff 00 ff 00"},
             {"212" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"213" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"214" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"215" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"216" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"217" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"218" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"228" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"219" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"21a" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"21b" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"21c" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"21d" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"21e" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"21f" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"220" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"221" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff"},
             {"222" ,"00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"223" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"224" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00"},
             {"229" ,"ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"},
        };

        private static string[] one_pcbs = ["7A9", "7AA", "7AB", "7AC"];
        private static string[] pcbs = ["7AA", "7AA", "7AB", "7AB"];

        private static string[] Response = ["00000400", "00000401", "00000402", "00000403", "000007BA", "000007BA", "000007BB", "000007BB"];

        /*
         通过 BodyCan 诊断读取 Boot 版本号
         发送报文(0x7A9/0x7AA /0x7AB /0x7AC): 22 01 00
         接收报文(0x7B9/0x7BA /0x7BB /0x7BC): 62 01 00 42 30 30 33
         零件号为 ASCII 码，Boot 版本号不一致，测试失败并退出。
         */

        /// <summary>
        /// Boot 版本号
        /// </summary>
        private string[] BootVersion = ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 01 00 AA AA AA AA",];

        //private Dictionary<string, string[]> BootVersion = new Dictionary<string, string[]>() {
        //    //{ pcbs[0], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 01 00 AA AA AA AA",] } ,
        //    { pcbs[1], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 01 00 AA AA AA AA",] } ,
        //    { pcbs[2], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 01 00 AA AA AA AA",] } ,
        //    //{ pcbs[3], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 01 00 AA AA AA AA",] } ,
        //};

        /*通过 BodyCan 诊断读取 App 版本号
          发送报文(0x7A9/0x7AA /0x7AB /0x7AC): 22 F1 95
          接收报文(0x7B9/0x7BA /0x7BB /0x7BC): 62 F1 95 41 30 32 33
          零件号为 ASCII 码，App 版本号不一致，测试失败并退出。
         */

        /// <summary>
        /// App 版本号
        /// </summary>
        private string[] AppVersion = ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 95 AA AA AA AA",];

        //private Dictionary<string, string[]> AppVersion = new Dictionary<string, string[]>() {
        //    //{ pcbs[0], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 95 AA AA AA AA",] } ,
        //    { pcbs[1], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 95 AA AA AA AA",] } ,
        //    { pcbs[2], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 95 AA AA AA AA",] } ,
        //    //{ pcbs[3], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 95 AA AA AA AA",] } ,
        //};

        /*
            通过 BodyCan 诊断读取 App 子版本号
            发送报文(0x7A9/0x7AA /0x7AB /0x7AC): 22 F1 97
            接收报文(0x7B9/0x7BA /0x7BB /0x7BC): 62 F1 97 53 31 30 30
            零件号为 ASCII 码，App 子版本号不一致，测试失败并退出。
         */

        /// <summary>
        /// App 子版本号
        /// </summary>
        private string[] AppSubVersion = ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 97 AA AA AA AA",];

        //private Dictionary<string, string[]> AppSubVersion = new Dictionary<string, string[]>() {
        //    //{ pcbs[0], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 97 AA AA AA AA",] } ,
        //    { pcbs[1], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 97 AA AA AA AA",] } ,
        //    { pcbs[2], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 97 AA AA AA AA",] } ,
        //    //{ pcbs[3], ["02 10 01 AA AA AA AA AA", "02 10 03 AA AA AA AA AA", "03 22 F1 97 AA AA AA AA",] } ,
        //};

        public void OpenDevice()
        {
            if (m_bOpen)
            {
                throw new Exception("设备已打开");
            }
            uint device_type_index_ = (uint)comboBox_device;
            uint device_index_;

            device_index_ = (uint)comboBox_device;

            device_handle_ = Method.ZCAN_OpenDevice(kDeviceType[device_type_index_].device_type, device_index_, 0);
            if (NULL == (Int64)device_handle_)
            {
                throw new Exception("打开设备失败,请检查设备类型和设备索引号是否正确");
            }
            m_bOpen = true;
            Thread.Sleep(500);
        }

        /// <summary>
        /// 设置波特率
        /// </summary>
        /// <param name="ad"></param>
        /// <param name="baud"></param>
        /// <returns></returns>
        private bool setBaudrateFD(char ad, UInt32 baud)
        {
            /*
                    string path="";
                    if(ad=='A')
                    {
                        path = channel_index_ + "/canfd_abit_baud_rate";
                    }
                    else if (ad == 'D')
                    {
                        path = channel_index_ + "/canfd_dbit_baud_rate";
                    }

                    string value = baud.ToString();

                    return 1 == property_.SetValue(path, value);
            */
            //修改为2个通道同时设置相同参数
            string value = baud.ToString();

            if (ad == 'A')
            {
                if (1 != property_.SetValue("0/canfd_abit_baud_rate", value))
                    return false;
                return 1 == property_.SetValue("1/canfd_abit_baud_rate", value);
            }
            else if (ad == 'D')
            {
                if (1 != property_.SetValue("0/canfd_dbit_baud_rate", value))
                    return false;
                return 1 == property_.SetValue("1/canfd_dbit_baud_rate", value);
            }
            else
                return false;
        }

        /// <summary>
        /// 设置CANFD标准
        /// </summary>
        /// <param name="canfd_standard"></param>
        /// <returns></returns>
        private bool setCANFDStandard(int canfd_standard)
        {
            string path = channel_index_ + "/canfd_standard";
            string value = canfd_standard.ToString();
            return 1 == property_.SetValue(path, value);
        }

        /// <summary>
        /// 设置滤波
        /// </summary>
        /// <returns></returns>
        private bool setFilter()
        {
            if (comboBox_standard2 == 2)
                return true;

            //2通道同时设置相同参数
            string path = channel_index_ + "/filter_clear";//清除滤波
            string value = "0";
            if (0 == property_.SetValue("0/filter_clear", value))
            {
                return false;
            }
            if (0 == property_.SetValue("1/filter_clear", value))
            {
                return false;
            }

            path = channel_index_ + "/filter_mode";
            value = comboBox_standard2.ToString();
            if (0 == property_.SetValue("0/filter_mode", value))
            {
                return false;
            }
            if (0 == property_.SetValue("1/filter_mode", value))
            {
                return false;
            }

            path = channel_index_ + "/filter_start";
            value = "0x" + TextBox_startid;
            if (0 == property_.SetValue("0/filter_start", value))
            {
                return false;
            }
            if (0 == property_.SetValue("1/filter_start", value))
            {
                return false;
            }

            path = channel_index_ + "/filter_end";
            value = "0x" + TextBox_endid;
            if (0 == property_.SetValue("0/filter_end", value))
            {
                return false;
            }
            if (0 == property_.SetValue("1/filter_end", value))
            {
                return false;
            }
            /*
            //add more  1
            path = channel_index_ + "/filter_start";
            value = "0x11";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            path = channel_index_ + "/filter_end";
            value = "0x20";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            //add more  2
            path = channel_index_ + "/filter_start";
            value = "0x101";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            path = channel_index_ + "/filter_end";
            value = "0x200";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            //add more  3
            path = channel_index_ + "/filter_start";
            value = "0x150";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            path = channel_index_ + "/filter_end";
            value = "0x300";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            //add more  4
            path = channel_index_ + "/filter_start";
            value = "0x401";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            path = channel_index_ + "/filter_end";
            value = "0x500";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            //add more  5
            path = channel_index_ + "/filter_start";
            value = "0x601";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            path = channel_index_ + "/filter_end";
            value = "0x602";
            if (0 == property_.SetValue(path, value))
            {
                return false;
            }
            */

            //path = channel_index_ + "/filter_ack";//滤波生效
            value = "0";

            //2个通道 同时生效
            if (0 == property_.SetValue("0/filter_ack", value))
            {
                return false;
            }
            if (0 == property_.SetValue("1/filter_ack", value))
            {
                return false;
            }

            //如果要设置多条滤波，在清除滤波和滤波生效之间设置多条滤波即可
            return true;
        }

        private void InitCan()
        {
            if (!m_bOpen)
            {
                throw new Exception("设备还没打开");
            }

            uint type = kDeviceType[comboBox_device].device_type;

            bool usbCanfd = type == Define.ZCAN_USBCANFD_100U ||
                type == Define.ZCAN_USBCANFD_200U ||
                type == Define.ZCAN_USBCANFD_MINI;
            bool canfdDevice = usbCanfd;
            if (!m_bCloud)
            {
                IntPtr ptr = Method.GetIProperty(device_handle_);
                if (NULL == (Int64)ptr)
                {
                    throw new Exception("设置指定路径属性失败");
                }

                property_ = (IProperty)Marshal.PtrToStructure((IntPtr)((UInt64)ptr), typeof(IProperty));

                {
                    if (usbCanfd)
                    {
                        if (!setCANFDStandard(comboBox_standard)) //设置CANFD标准
                        {
                            throw new Exception("设置CANFD标准失败");
                        }
                    }
                    /*
                    if (checkBox_ABIT.Checked)//设置波特率
                    {
                        if (!setCustomBaudrate())
                        {
                            MessageBox.Show("设置自定义波特率失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                            return;
                        }
                    }
                    else
                    */
                    {
                        // set rates fd
                        if (!setBaudrateFD('A', kAbitTiming[comboBox_ABIT]))
                        {
                            throw new Exception("设置仲裁波特率失败");
                        }
                        if (!setBaudrateFD('D', kDbitTiming[comboBox_ABIT2]))
                        {
                            throw new Exception("设置数据波特率失败");
                        }
                    }
                }
            }

            ZCAN_CHANNEL_INIT_CONFIG config_ = new ZCAN_CHANNEL_INIT_CONFIG();

            {
                config_.canfd.mode = (byte)comboBox_mode;
                if (canfdDevice)
                {
                    config_.can_type = Define.TYPE_CANFD;
                }
                else
                {
                    config_.can_type = Define.TYPE_CAN;
                }
            }
            IntPtr pConfig = Marshal.AllocHGlobal(Marshal.SizeOf(config_));
            Marshal.StructureToPtr(config_, pConfig, true);

            channel_handle_ = Method.ZCAN_InitCAN(device_handle_, (uint)0, pConfig);
            //CAN2
            channel_handle2_ = Method.ZCAN_InitCAN(device_handle_, (uint)1, pConfig);
            Marshal.FreeHGlobal(pConfig);

            if (NULL == (long)channel_handle_)
            {
                throw new Exception("初始化CAN1失败");
            }
            if (NULL == (long)channel_handle2_)
            {
                throw new Exception("初始化CAN2失败");
            }
            {
                /*
                if (usbCanfd && checkBox_resistance.Checked)
                {
                    if (!setResistanceEnable())
                    {
                        MessageBox.Show("使能终端电阻失败", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        return;
                    }
                }
                */

                if (canfdDevice && !setFilter())
                {
                    throw new Exception("设置滤波失败");
                }
            }

            m_init = true;
        }

        private void StartCan()
        {
            if (!m_bOpen)
            {
                throw new Exception("设备还没打开");
            }

            if (!m_init)
            {
                throw new Exception("设备还未初始化");
            }

            if (Method.ZCAN_StartCAN(channel_handle_) != Define.STATUS_OK)
            {
                throw new Exception("启动CAN1失败");
            }
            //CAN2
            if (Method.ZCAN_StartCAN(channel_handle2_) != Define.STATUS_OK)
            {
                throw new Exception("启动CAN2失败");
            }
            m_bStart = true;
            m_bReset = false;

            if (null == recv_data_thread_)
            {
                recv_data_thread_ = new recvdatathread();
                recv_data_thread_.setChannelHandle(channel_handle_, channel_handle2_);
                recv_data_thread_.setStart(m_bStart);
                recv_data_thread_.RecvFDData += this.AddData;
                m_threadClosed = false;
            }
            else
            {
                recv_data_thread_.setStart(true);
                recv_data_thread_.setChannelHandle(channel_handle_, channel_handle2_);
                m_threadClosed = false;
            }
        }

        private bool isSending = false;

        private void ResetDevice()
        {
            isWhile = false;
            while (isSending) { Thread.Sleep(10); }
            if (!m_bOpen)
            {
                //Global.SetLog("CANFD设备未打开!");
                return;
            }
            if (m_bReset)
            {
                throw new Exception("已经复位过");
            }
            if (Method.ZCAN_ResetCAN(channel_handle_) != Define.STATUS_OK)
            {
                throw new Exception("复位CAN1失败");
            }
            //CAN2
            if (Method.ZCAN_ResetCAN(channel_handle2_) != Define.STATUS_OK)
            {
                throw new Exception("复位CAN2失败");
            }

            if (true != m_threadClosed)
            {
                recv_data_thread_.setStart(false);
                m_threadClosed = true;
            }
            m_init = false;
            m_bReset = true;
        }

        /// <summary>
        /// 关闭设备
        /// </summary>
        public void CloseDevice()
        {
            isWhile = false;
            while (isSending) { Thread.Sleep(10); };
            if (!m_bOpen)
            {
                //Global.SetLog("CANFD设备未打开!");
                return;
            }
            Method.ZCAN_CloseDevice(device_handle_);
            m_bOpen = false;
            m_bCloud = false;
            m_init = false;
            m_bReset = false;
            if (true != m_threadClosed)
            {
                recv_data_thread_.setStart(false);
                m_threadClosed = true;
            }
        }

        private bool isbusy = false;

        private void AddData(ZCAN_ReceiveFD_Data[] data, uint len, uint ch)
        {
            //while (isbusy)
            //{
            //    Thread.Sleep(10);
            //}
            isbusy = true;
            receiveData = " ";
            ReceiveData rec;
            string temp = "";
            UInt64 timeTemp = 0;
            string headData = "";
            for (uint i = 0; i < len; ++i)
            {
                ZCAN_ReceiveFD_Data canfd = data[i];
                uint id = canfd.frame.can_id;
                string eff = IsEFF(id) ? "扩展帧" : "标准帧";
                string rtr = IsRTR(id) ? "远程帧" : "数据帧";
                temp = String.Format("{0:X8}", GetId(id));
                receiveData = BitConverter.ToString(canfd.frame.data).Replace("-", "").Substring(0, 16);
                headData = receiveData.Substring(0, 8);
                timeTemp = canfd.timestamp;
                rec = new ReceiveData() { timeStamp = timeTemp, data = receiveData };
                if (!temp.Contains("400") || !temp.Contains("401") || !temp.Contains("402") || !temp.Contains("403"))
                {
                    Mylog.Info($"通道{ch + 1}:0x{temp}: {rec.data}--{rec.timeStamp}");
                }
                if (!ReceiveData_queue.ContainsKey(temp))
                {
                    Queue<ReceiveData> queue = new Queue<ReceiveData>();
                    //}
                    //else
                    //{
                    //    queue = new Queue<ReceiveData>(1);

                    //}
                    queue.Enqueue(rec);
                    ReceiveData_queue.Add(temp, queue);
                }
                else
                {
                    if (temp.Contains(Response[0]) || temp.Contains(Response[1]) || temp.Contains(Response[2]) || temp.Contains(Response[3]))
                    {
                        if (ReceiveData_queue[temp].Count() > 1000)
                        {
                            ReceiveData_queue[temp].Dequeue();
                        }
                        ReceiveData_queue[temp].Enqueue(rec);
                    }
                    else
                    {
                        if (headData == "07620100" || headData == "0762F195" || headData == "0762F197")
                        {
                            //Mylog.Debug($"0x{temp}: {receiveData}");
                            //Console.WriteLine(rec.data.Substring(14, 2));

                            ReceiveData_queue[temp].Dequeue();

                            ReceiveData_queue[temp].Enqueue(rec);
                        }
                        //else
                        //{
                        //    if (ReceiveData_queue[temp].Count() > 0)
                        //    {
                        //        ReceiveData_queue[temp].Dequeue();
                        //    }
                        //    ReceiveData_queue[temp].Enqueue(rec);
                        //}
                    }
                }
                if (temp.Contains(Response[4]) || temp.Contains(Response[5]) || temp.Contains(Response[6]) || temp.Contains(Response[7]))
                {
                    Mylog.Info($" headdata = 0x{temp}: {receiveData}");
                    if (headData == "07620100" || headData == "0762F195" || headData == "0762F197")
                    {
                        // if (headData == "07620100" || headData == "0762F195" || headData == "0762F197") {
                        // //Console.WriteLine(rec.data.Substring(14, 2)); if (ReceiveData_queue[temp].Count() > 0) {
                        // ReceiveData_queue[temp].Dequeue(); } ReceiveData_queue[temp].Enqueue(rec);
                        isReceived = true;
                        // }
                    }
                }
                else
                {
                    var tmp = rec.data.Substring(0, 2);
                    for (int j = 0; j < 4; j++)
                    {
                        if (temp == Response[j])
                        {
                            if (tmp != "00")
                            {
                                IsFault[j] = true;
                                ErroeCode[j] = Convert.ToByte(tmp, 16);
                            }
                        }
                    }
                }
            }
            Thread.Sleep(10);
            isbusy = false;
        }

        public List<bool> IsFault { get; set; } = new List<bool>() { false, false, false, false };
        public List<byte> ErroeCode { get; set; } = new List<byte>() { 0, 0, 0, 0 };

        private bool isReceived = false;

        public uint MakeCanId(uint id, int eff, int rtr, int err)//1:extend frame 0:standard frame
        {
            uint ueff = (uint)(!!(Convert.ToBoolean(eff)) ? 1 : 0);
            uint urtr = (uint)(!!(Convert.ToBoolean(rtr)) ? 1 : 0);
            uint uerr = (uint)(!!(Convert.ToBoolean(err)) ? 1 : 0);
            return id | ueff << 31 | urtr << 30 | uerr << 29;
        }

        /// <summary>
        /// 拆分text到发送data数组
        /// </summary>
        /// <param name="data"></param>
        /// <param name="transData"></param>
        /// <param name="maxLen"></param>
        /// <returns></returns>
        private int SplitData(string data, ref byte[] transData, int maxLen)
        {
            int retLen = 0;
            string[] dataArray = data.Split(' ');
            for (int i = 0; (i < maxLen) && (i < dataArray.Length); i++)
            {
                transData[i] = Convert.ToByte(dataArray[i].Substring(0, 2), 16);
                retLen++;
            }

            //return dataArray.Length;
            return retLen;
        }

        public bool IsEFF(uint id)//1:extend frame 0:standard frame
        {
            return !!Convert.ToBoolean((id & CAN_EFF_FLAG));
        }

        public bool IsRTR(uint id)//1:remote frame 0:data frame
        {
            return !!Convert.ToBoolean((id & CAN_RTR_FLAG));
        }

        public uint GetId(uint id)
        {
            return id & CAN_ID_FLAG;
        }

        private void AddErr()
        {
            ZCAN_CHANNEL_ERROR_INFO pErrInfo = new ZCAN_CHANNEL_ERROR_INFO();
            IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(pErrInfo));
            Marshal.StructureToPtr(pErrInfo, ptr, true);
            if (Method.ZCAN_ReadChannelErrInfo(channel_handle_, ptr) != Define.STATUS_OK)
            {
                throw new Exception("获取错误信息失败");
            }
            Marshal.FreeHGlobal(ptr);

            string errorInfo = String.Format("错误码：{0:D1}", pErrInfo.error_code);
            //ReceiveData_queue.Enqueue(errorInfo);
            //int index = listBox.Items.Add(errorInfo);
            //listBox.SelectedIndex = index;
            Global.SetLog(errorInfo);
            Mylog.Info($"++++发送数据失败:{errorInfo}++++");
        }

        private void send(string str_id, string send_data, int channnel)
        {
            if (!m_bOpen)
            {
                CloseLight();
                return;
            }
            uint id = (uint)System.Convert.ToInt32(str_id, 16);
            string data = send_data;
            int frame_type_index = comboBox_frametype;
            int protocol_index = comboBox_protocol;
            int send_type_index = comboBox_sendtype;
            int canfd_exp_index = comboBox_canfd_exp;
            int chan = channnel;

            uint result; //发送的帧数

            //if (0 == protocol_index) //can
            //{
            //    ZCAN_Transmit_Data can_data = new ZCAN_Transmit_Data();
            //    can_data.frame.can_id = MakeCanId(id, frame_type_index, 0, 0);
            //    ////can_data.frame.data = new byte[8];
            //    can_data.frame.data = new byte[64]; // 用最大的数组，避免输入错误导致出错。
            //    can_data.frame.can_dlc = (byte)SplitData(data, ref can_data.frame.data, CAN_MAX_DLEN);
            //    ////can_data.frame.can_dlc = (can_data.frame.can_dlc > 8) ? 8 : can_data.frame.can_dlc;
            //    can_data.transmit_type = (uint)send_type_index;
            //    IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(can_data));
            //    Marshal.StructureToPtr(can_data, ptr, true);
            //    result = Method.ZCAN_Transmit(channel_handle_, ptr, 1);
            //    Marshal.FreeHGlobal(ptr);
            //}
            //else ////canfd
            {
                ZCAN_TransmitFD_Data canfd_data = new ZCAN_TransmitFD_Data();
                canfd_data.frame.can_id = MakeCanId(id, frame_type_index, 0, 0);
                canfd_data.frame.data = new byte[64];
                canfd_data.frame.len = (byte)SplitData(data, ref canfd_data.frame.data, CANFD_MAX_DLEN);
                canfd_data.transmit_type = (uint)send_type_index;
                canfd_data.frame.flags = (byte)((canfd_exp_index != 0) ? CANFD_BRS : 0);
                IntPtr ptr = Marshal.AllocHGlobal(Marshal.SizeOf(canfd_data));
                Marshal.StructureToPtr(canfd_data, ptr, true);
                //result = Method.ZCAN_TransmitFD(channel_handle_, ptr, 1);
                result = Method.ZCAN_TransmitFD((chan == 0) ? channel_handle_ : channel_handle2_, ptr, 1);
                Marshal.FreeHGlobal(ptr);
            }
            if (result != 1)
            {
                Global.SetLog("发送数据失败!");
                AddErr();
                //return false;
                return;
            }
            else
            {
                return;
            }
        }

        public void LowLight(bool oneProduct)
        {
            isWhile = true;
            isSending = true;
            Task.Run(() =>
            {
                if (oneProduct)
                {
                    while (isWhile)
                    {
                        foreach (var item in Lowkeys)
                        {
                            send(item.Key, item.Value, 0); //通道0发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                else
                {
                    while (isWhile)
                    {
                        foreach (var item in Lowkeys)
                        {
                            send(item.Key, item.Value, 0); //通道0发送
                            Thread.Sleep(0);
                        }
                        foreach (var item in Lowkeys)
                        {
                            send(item.Key, item.Value, 1);//通道1发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                isSending = false;
            });
        }

        public void HighLight(bool oneProduct)
        {
            isWhile = true;
            isSending = true;
            Task.Run(() =>
            {
                if (oneProduct)
                {
                    while (isWhile)
                    {
                        foreach (var item in Highkeys)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                else
                {
                    while (isWhile)
                    {
                        foreach (var item in Highkeys)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        foreach (var item in Highkeys)
                        {
                            send(item.Key, item.Value, 1);//通道1发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                isSending = false;
            });
        }

        /// <summary>
        /// </summary>
        /// <param name="oneProduct">是否只有一套产品</param>
        public void MidLight(bool oneProduct)
        {
            isWhile = true;
            isSending = true;
            Task.Run(() =>
            {
                if (oneProduct)
                {
                    while (isWhile)
                    {
                        foreach (var item in Midkeys)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                else
                {
                    while (isWhile)
                    {
                        foreach (var item in Midkeys)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        foreach (var item in Midkeys)
                        {
                            send(item.Key, item.Value, 1);//通道1发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                isSending = false;
            });
        }

        /// <summary>
        /// </summary>
        /// <param name="oneProduct">是否只有一套产品</param>
        public void Checker1Light(bool oneProduct)
        {
            isWhile = true;
            isSending = true;
            Task.Run(() =>
            {
                if (oneProduct)
                {
                    while (isWhile)
                    {
                        foreach (var item in Checker1)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                else
                {
                    while (isWhile)
                    {
                        foreach (var item in Checker1)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        foreach (var item in Checker1)
                        {
                            send(item.Key, item.Value, 1);//通道1发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                isSending = false;
            });
        }

        /// <summary>
        /// </summary>
        /// <param name="oneDevice">是否只有一套产品</param>
        public void Checker2Light(bool oneProduct)
        {
            isWhile = true;
            isSending = true;
            Task.Run(() =>
            {
                if (oneProduct)
                {
                    while (isWhile)
                    {
                        foreach (var item in Checker2)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                else
                {
                    while (isWhile)
                    {
                        foreach (var item in Checker2)
                        {
                            send(item.Key, item.Value, 0);//通道0发送
                            Thread.Sleep(0);
                        }
                        foreach (var item in Checker2)
                        {
                            send(item.Key, item.Value, 1);//通道1发送
                            Thread.Sleep(0);
                        }
                        Thread.Sleep(10);
                    }
                }
                isSending = false;
            });
        }

        /// <summary>
        /// 发送 Boot 版本号报文
        /// </summary>
        /// <param name="pcbnumber"></param>
        public string CheckBootVersion(int pcbnumber, int channel, bool oneProduct)
        {
            isReceived = false;
            Mylog.Info("----ReadBoot----");
            var pcb = pcbs;
            if (oneProduct)
            {
                pcb = one_pcbs;
            }
            for (int i = 0; i < 3; i++)
            {
                foreach (var item in BootVersion)
                {
                    send(pcb[pcbnumber], item, channel);//通道0发送
                    Mylog.Info($"----通道{channel + 1}发送:{pcb[pcbnumber]}----{item}");
                    Thread.Sleep(200);
                }
                var time = 1;
                while (!isReceived)
                {
                    if (time > 2000)
                    {
                        if (i == 2)
                        {
                            return "超时，未接收到数据";
                        }
                        else
                        {
                            break;
                        }
                    }
                    Thread.Sleep(10);
                    time += 10;
                }
                if (isReceived)
                {
                    break;
                }
            }
            if (ReceiveData_queue.ContainsKey(Response[pcbnumber + 4]))
            {
                if (ReceiveData_queue[Response[pcbnumber + 4]].Count > 0)
                {
                    var temp = ReceiveData_queue[Response[pcbnumber + 4]].Dequeue();
                    ReceiveData_queue.Clear();
                    return temp.data.Substring(8);
                }
                else
                {
                    throw new Exception("Queue为0，未接收到数据");
                }
            }
            return "字典为空，未接收到数据";
        }

        /// <summary>
        /// 发送 App 版本号报文
        /// </summary>
        /// <param name="pcbnumber"></param>
        public string CheckAPPVersion(int pcbnumber, int channel, bool oneProduct)
        {
            isReceived = false;
            var pcb = pcbs;
            if (oneProduct)
            {
                pcb = one_pcbs;
            }
            Mylog.Info("----ReadApp----");
            for (int i = 0; i < 3; i++)
            {
                foreach (var item in AppVersion)
                {
                    send(pcb[pcbnumber], item, channel);//通道0发送
                    Mylog.Info($"----通道{channel + 1}发送:{pcb[pcbnumber]}----{item}");
                    Thread.Sleep(200);
                }
                var time = 1;
                while (!isReceived)
                {
                    if (time > 2000)
                    {
                        if (i == 2)
                        {
                            return "超时，未接收到数据";
                        }
                        else
                        {
                            break;
                        }
                    }
                    Thread.Sleep(10);
                    time += 10;
                }
                if (isReceived)
                {
                    break;
                }
            }
            if (ReceiveData_queue.ContainsKey(Response[pcbnumber + 4]))
            {
                if (ReceiveData_queue[Response[pcbnumber + 4]].Count > 0)
                {
                    var temp = ReceiveData_queue[Response[pcbnumber + 4]].Dequeue();
                    ReceiveData_queue.Clear();
                    return temp.data.Substring(8);
                }
                else
                {
                    throw new Exception("Queue为0，未接收到数据");
                }
            }
            return "字典为空，未接收到数据";
        }

        /// <summary>
        /// 发送 App 子版本号报文
        /// </summary>
        /// 1111111100000000
        /// <param name="pcbnumber"></param>
        public string CheckSubAPPVersion(int pcbnumber, int channel, bool oneProduct)
        {
            isReceived = false;
            var pcb = pcbs;
            if (oneProduct)
            {
                pcb = one_pcbs;
            }
            Mylog.Info("----ReadSubApp----");
            for (int i = 0; i < 3; i++)
            {
                foreach (var item in AppSubVersion)
                {
                    send(pcb[pcbnumber], item, channel);//通道0发送
                    Mylog.Info($"----通道{channel + 1}发送:{pcb[pcbnumber]}----{item}");
                    Thread.Sleep(200);
                }
                var time = 1;
                while (!isReceived)
                {
                    if (time > 2000)
                    {
                        if (i == 2)
                        {
                            return "超时，未接收到数据";
                        }
                        else
                        {
                            break;
                        }
                    }
                    Thread.Sleep(10);
                    time += 10;
                }
                if (isReceived)
                {
                    break;
                }
            }
            if (ReceiveData_queue.ContainsKey(Response[pcbnumber + 4]))
            {
                if (ReceiveData_queue[Response[pcbnumber + 4]].Count > 0)
                {
                    var temp = ReceiveData_queue[Response[pcbnumber + 4]].Dequeue();
                    ReceiveData_queue.Clear();
                    return temp.data.Substring(8);
                }
                else
                {
                    throw new Exception("Queue为0，未接收到数据");
                }
            }
            return "字典为空，未接收到数据";
        }

        public void CloseLight()
        {
            isWhile = false;
        }

        /// <summary>
        /// 初始化
        /// </summary>
        public void InitAndStart()
        {
            //初始化
            InitCan();
            Thread.Sleep(500);
            //启动CAN
            StartCan();
        }

        /// <summary>
        /// 复位
        /// </summary>
        public void Reset()
        {
            isWhile = false;
            Thread.Sleep(3000);
            ResetDevice();
            //ReceiveData_queue.Clear();
        }
    }
}